Перейти к основному содержимому

9.03. Алгоритм

Родителям и детям
Алгоритм
Алгоритмическое мышление («рецепт бутерброда как алгоритм»)
Добавить mermaid схему
Добавить задачи

Что такое алгоритм? Слово с большой историей

Представьте, что вы хотите испечь блинчики. Вы открываете кулинарную книгу — и там не написано просто «испеки блинчики». Там есть пошаговая инструкция:

  1. Возьми яйцо, муку, молоко.
  2. Взбей их венчиком до однородной массы.
  3. Разогрей сковороду, смажь маслом.
  4. Налей немного теста, жарь до золотистой корочки.
  5. Переверни, жарь ещё 30 секунд.

Это и есть алгоритм — чёткая последовательность действий, которая приводит к нужному результату.

Слово алгоритм звучит современно, но оно очень старое — ему больше тысячи лет! Оно происходит от имени средневекового персидского учёного Аль-Хорезми (полное имя — Мухаммад ибн Муса аль-Хорезми). Он жил в IX веке в городе Хорезм (на территории современного Узбекистана) и написал книги по арифметике и алгебре. В них он объяснял, как выполнять вычисления: как делить числа, как извлекать корень, как решать уравнения — не просто «вот ответ», а по шагам. Эти правила называли аль-Хорезми, а позже, в Европе, стали произносить как алгоритм.

Так что алгоритм — это не изобретение компьютеров. Люди использовали их всегда:

  • архитекторы — чтобы построить пирамиду,
  • моряки — чтобы проложить курс по звёздам,
  • врачи — чтобы поставить диагноз по симптомам.

Компьютеры просто сделали алгоритмы особенно заметными — потому что всё, что делает компьютер, выполняется по алгоритмам. Без алгоритма компьютер — как кухня без рецептов: есть продукты, но неизвестно, что и как из них приготовить.


Главные свойства алгоритма

Не всякая инструкция — алгоритм. Чтобы считаться настоящим алгоритмом, последовательность действий должна обладать пятью важными свойствами:

  1. Дискретность — действия идут по шагам. Нельзя «немного взбить и одновременно налить на сковороду». Сначала — шаг 1, потом — шаг 2, и так далее. Каждый шаг отделён от другого, как ступеньки лестницы.

  2. Понятность — каждый шаг должен быть ясен исполнителю. Если вы объясняете ребёнку 8 лет, как завязать шнурки, вы не скажете: «Сформируйте петлю и выполните операцию транспозиции». Вы скажете: «Заведи один конец под другой и потяни». Исполнитель — это тот, кто выполняет алгоритм: человек, робот, компьютер-программа.

  3. Определённость (детерминированность) — на каждом шаге должно быть однозначно понятно, что делать дальше. Нельзя писать: «Если хочется — добавь ваниль». В алгоритме: «Если в рецепте указано «ваниль» — добавь 1 ч. л.; иначе — пропусти этот шаг».

  4. Результативность (конечность) — алгоритм всегда должен завершиться за конечное число шагов и дать результат. Он не может «крутиться вечно». Даже если результат — «не удалось», это тоже результат (например, «блин пригорел — рецепт не сработал при таких условиях»).

  5. Массовость — хороший алгоритм работает не только с одним конкретным случаем, а с целым классом похожих задач. Рецепт блинов должен получиться не только с молоком от коровы Ася, но и от коровы Бурёнка, и даже с соевым молоком (если внести поправку в шаг 2). Алгоритм сложения работает и для 2 + 3, и для 127 + 89.

Интересный факт: первый в мире алгоритм, предназначенный для исполнения машиной, придумал Чарльз Бэббидж в XIX веке для своей Аналитической машины. А его сотрудница Ада Лавлейс (дочь поэта Байрона) написала программу для вычисления чисел Бернулли — и по сути стала первым в мире программистом. Она поняла: машина может не только считать, но и следовать сложным правилам, как человек следует рецепту.


Простые, линейные и нелинейные алгоритмы

Все алгоритмы можно разделить на три основные группы — по тому, как устроена последовательность шагов.

1. Простые алгоритмы (интуитивные)

Это те, которые мы выполняем каждый день, даже не задумываясь, что это — алгоритмы. Например:

  • Как умыться утром:
    1. Подойди к раковине.
    2. Открой кран с водой.
    3. Смочи лицо.
    4. Нанеси пенку.
    5. Потри щёки, лоб, подбородок.
    6. Смой пенку.
    7. Вытри лицо полотенцем.
    8. Закрой кран.

Здесь нет ветвлений, нет повторений — просто один шаг за другим. Такие алгоритмы называются линейными (о них — чуть ниже). Но «простой» — не значит «неправильный». Простота — признак хорошей продуманности.

2. Линейные алгоритмы

Это формальное название для последовательностей без развилок и циклов. Каждый шаг выполняется ровно один раз, строго в заданном порядке.

Пример — алгоритм нахождения среднего арифметического трёх чисел:

  1. Возьми первое число — a.
  2. Возьми второе число — b.
  3. Возьми третье число — c.
  4. Сложи их: s = a + b + c.
  5. Раздели сумму на 3: result = s / 3.
  6. Выведи result.

Неважно, какие числа — 1, 2, 3 или 100, 200, 300 — шаги одни и те же, порядок не меняется.

💡 Заметка для старших школьников: в программировании линейные алгоритмы — основа. Даже сложные программы в какой-то момент «раскручиваются» в линейную последовательность машинных команд. Но чтобы управлять порядком этих команд, нужны более сложные конструкции — и тогда появляются нелинейные алгоритмы.

3. Нелинейные алгоритмы

Это — когда путь «не по прямой». Здесь возможны:

  • Ветвления (развилки) — «если… то… иначе…»
  • Циклы (повторения) — «делай это снова и снова, пока не выполнится условие»

Пример с ветвлением — алгоритм надевания обуви перед выходом на улицу:

  1. Посмотри в окно.
  2. Если на улице сухо → надень кроссовки.
  3. Иначе, если идёт дождь → надень резиновые сапоги.
  4. Иначе (например, снег) → надень зимние ботинки.
  5. Завяжи шнурки.

Здесь шаги 2–4 — ветвление. Выполняется только один из вариантов, в зависимости от условия.

Пример с циклом — алгоритм мытья посуды:

  1. Возьми первую грязную тарелку.
  2. Помой её.
  3. Поставь в сушилку.
  4. Повторяй шаги 1–3, пока не закончатся грязные тарелки.

Цикл позволяет не писать по шагу на каждую тарелку — иначе для 10 тарелок понадобилось бы 30 шагов! Цикл сокращает запись и делает алгоритм универсальным: он сработает и для 2 тарелок, и для 20.

🔍 Как это связано с компьютерами?
В языках программирования ветвления реализуются через if… else, циклы — через for, while. Но логика остаётся той же, что и в жизни. Именно поэтому обучение алгоритмам начинается не с кода, а с понимания последовательностей, условий и повторений в привычных действиях.


Алгоритмическое мышление: почему это важно — даже если вы не станете программистом

Алгоритмическое мышление — это не умение писать код. Это способ организовывать мысли и действия так, чтобы решать задачи эффективно, без путаницы и ошибок.

Представьте, вы объясняете роботу-помощнику, как сделать бутерброд с маслом и сыром. Робот очень точный, но ничего не знает сам — он умеет только выполнять команды буквально. Что будет, если вы скажете:

«Возьми хлеб, положи сыр, намажь маслом»?

Робот:

  1. Возьмёт кусок хлеба.
  2. Положит на него кусок сыра.
  3. Намажет маслом сверху сыра — и масло не пристанет, сыр будет скользить, бутерброд развалится.

Правильный алгоритм:

  1. Возьми кусок хлеба.
  2. Если хлеб сухой → намажь его маслом.
  3. Положи сверху ломтик сыра.
  4. Если хочешь — накрой вторым куском хлеба (сэндвич).
  5. Подай на тарелке.

Видите разницу? Второй вариант учитывает:

  • порядок (масло — до сыра),
  • условия («если сухой», «если хочешь»),
  • чёткое завершение (подать на тарелке — сигнал, что готово).

Это и есть алгоритмическое мышление:

  • разбивать задачу на шаги,
  • прогнозировать, что может пойти не так,
  • проверять, все ли случаи учтены,
  • искать способ сделать короче, но не менее надёжно.

Оно помогает:

  • писать сочинения по плану,
  • собирать чемодан в поездку,
  • готовиться к экзаменам,
  • даже договариваться с друзьями: «Если в 15:00 будет солнечно — идём в парк; иначе — в кино».

🌟 Вывод: алгоритмы — это не про компьютеры. Это про ясность, порядок и ответственность за результат. А компьютеры — просто самые послушные исполнители, которые никогда не устают… но и никогда не догадаются сделать «как лучше», если вы не написали это в алгоритме.


Как увидеть алгоритм? Блок-схемы — карта действий

Представьте, что вы рисуете карту для путешествия. На ней — дороги, развилки, «повтори этот участок три раза», «если мост закрыт — езжай в объезд». Такая карта помогает не заблудиться.

Блок-схема — это как раз карта алгоритма. Она показывает:

  • с какого шага начать,
  • в каком порядке идти,
  • где делать выбор,
  • где возвращаться и повторять.

Для построения блок-схем используются специальные фигуры, каждая из которых означает свой тип действия. Вот основные:

ФигураНазваниеЧто означает
🟦 ОвалНачало / КонецТочка входа и выхода из алгоритма
🟨 ПрямоугольникДействиеКонкретный шаг: «взять хлеб», «сложить числа», «включить свет»
🟩 РомбУсловие (решение)Вопрос, на который можно ответить «да» или «нет»: «идёт дождь?», «число чётное?»
⬛ СтрелкаПереходНаправление выполнения — от одного блока к другому

Блок-схемы универсальны: их понимают и инженеры в Японии, и школьники в Бразилии — потому что логика одинакова во всём мире.


1. Линейный алгоритм: «Как приготовить чай»

Самый простой — без развилок и повторов. Каждое действие следует за предыдущим, как бусины на нитке.

🔎 Обратите внимание:
— Все блоки — прямоугольники (действия), кроме начала и конца.
— Нет ромбов — значит, нет выбора. Всё происходит одинаково, в любом случае.
— Если вы забудете, например, шаг «вынь пакетик», чай получится горьким — алгоритм некорректен. Это показывает, насколько важна полнота описания.


2. Алгоритм с ветвлением: «Как одеться по погоде»

Здесь путь раздваивается. Выбор зависит от условия — например, температуры или осадков.

💡 Как читать такую схему:
Начинаем сверху. Доходим до ромба — задаём вопрос. В зависимости от ответа — идём по одной из стрелок. Важно, что все пути в итоге ведут к концу. Если бы, например, после «шапку, пальто» не было стрелки к концу — алгоритм завис бы.


3. Алгоритм с циклом: «Как помыть все фрукты в вазе»

Цикл позволяет повторять шаги, не переписывая их каждый раз.

🔄 Как работает цикл:
Мы заходим в «петлю»: проверяем условие → если «да» — делаем действия → возвращаемся к проверке. Так продолжается, пока условие не станет «нет».
Цикл здесь — с постусловием: сначала проверка, потом действие. Существуют и другие виды (например, цикл «сделай 5 раз»), но логика та же — повтор по правилу.


Алгоритмическое мышление в действии: «Рецепт бутерброда для робота»

Вернёмся к нашему роботу. Допустим, его зовут Бип, он умеет:

  • брать предметы руками,
  • класть предметы на поверхность,
  • намазывать мягкое вещество (масло, джем) на плоский предмет (хлеб),
  • резать ножом (осторожно!),
  • проверять: «сухой ли хлеб?», «есть ли сыр на столе?».

Вот плохой алгоритм:

  1. Возьми хлеб.
  2. Намажь маслом.
  3. Положи сыр.

Что может пойти не так?

  • Хлеба нет — робот «зависнет», пытаясь взять то, чего нет.
  • Сыра нет — робот положит «ничего», и бутерброд будет без сыра.
  • Хлеб уже масляный — робот намажет ещё раз, и будет «масляный блин».
  • Робот возьмёт весь батон, а не один ломтик.

Хороший алгоритм учитывает возможные проблемы и даёт чёткие указания:

Что изменилось?

  • Появились проверки на наличие (хлеб, сыр).
  • Есть действие при ошибке (сообщить, положить обратно).
  • Описаны мелкие, но важные шаги: «положи нож», «поставь сыр на место» — чтобы кухня осталась в порядке.
  • Робот не делает предположений — только то, что явно указано.

Это и есть алгоритмическое мышление:

  1. Декомпозиция — разбиваем большую задачу («сделай бутерброд») на мелкие шаги.
  2. Анализ условий — что может быть не так? Что нужно проверить?
  3. Обработка исключений — что делать, если «сыра нет» или «хлеб мокрый»?
  4. Оптимизация — можно ли убрать лишнее? (Например, «положи нож» и «поставь сыр» можно объединить в «убери всё на место» — но для робота лучше оставить отдельно, чтобы не забыл.)

🧠 Полезная привычка:
Перед тем как что-то делать (собрать рюкзак, написать сообщение, приготовить завтрак), задайте себе три вопроса:

  1. С чего начинаю?
  2. Где могут быть развилки?
  3. Как пойму, что закончил?
    Это тренирует алгоритмическое мышление — и делает жизнь спокойнее.

Типовые структуры алгоритмов: три кита

Любой, даже самый сложный алгоритм (например, поиск пути в Google Maps или распознавание лица на фото) строится из трёх базовых конструкций:

НазваниеЧто делаетПример из жизниПример из программирования
ПоследовательностьШаги выполняются один за другимЗаварить чай → налить в кружку → добавить лимонa = 5; b = 3; s = a + b; print(s)
ВетвлениеВыбор пути в зависимости от условияЕсли идёт дождь — бери зонт; иначе — не бериif temp > 20: wear("футболку") else: wear("кофту")
ЦиклПовторение действий, пока выполняется условиеМыть тарелки, пока они есть в раковинеwhile dishes_left > 0: wash_one_dish()

⚙️ Фундаментальный факт:
В 1966 году учёные доказали теорему: любой вычислимый алгоритм можно реализовать, используя только эти три структуры. Другими словами — хватит последовательности, ветвления и цикла, чтобы написать любую программу в мире. (Современные языки добавляют удобства — функции, классы — но «под капотом» всё сводится к этим трём.)


Задачи для самостоятельной работы

Ниже — 5 задач разного уровня. Каждая включает:

  • описание ситуации,
  • вопрос,
  • подсказки (для младших),
  • углубление (для старших).

Задача 1. «Утренний ритуал» (8–10 лет)

Вы просыпаетесь в 7:00. Вам нужно: умыться, позавтракать, одеться, собрать портфель, обуться и выйти из дома до 7:45.

Вопрос:
Составьте линейный алгоритм из 6–8 шагов. Укажите, какие шаги могут быть переставлены местами, а какие — нет (например, нельзя одеться после того, как обулся).

Подсказка:
Нарисуйте блок-схему. Подумайте: что будет, если вы сначала обуетесь, а потом оденетесь?

Задача 2. «Зоопарк и билеты» (10–12 лет)

В зоопарке билет стоит 300 ₽. Для детей до 7 лет — бесплатно, для школьников (7–17 лет) — 150 ₽. У кассира есть калькулятор и список возрастов посетителей: [5, 9, 12, 30, 42, 6].

Вопрос:
Напишите алгоритм (словами или блок-схемой), который по возрасту одного человека определяет стоимость билета. Затем — как посчитать общую сумму для всей группы.

Подсказка:
Используйте ветвление: «если возраст < 7… иначе если возраст 17… иначе…».
Углубление:
Как изменится алгоритм, если появится скидка 10% для групп от 5 человек?

Задача 3. «Уборка комнаты» (11–14 лет)

В комнате 12 предметов лежат не на местах: книги, одежда, игрушки. Робот-уборщик умеет:

  • поднимать предмет,
  • определять его тип (книга / одежда / игрушка),
  • ставить книги на полку, вешать одежду в шкаф, класть игрушки в коробку.

Вопрос:
Напишите алгоритм с циклом и ветвлением. Сколько раз в нём будет проверка типа предмета? Сколько — перемещений?

Подсказка:
Цикл: «пока есть предметы на полу». Внутри — ветвление по типу.
Углубление:
Что, если робот может брать два предмета за раз? Как изменить алгоритм?

Задача 4. «Алгоритм Евклида для детей» (13–16 лет)

Чтобы найти наибольший общий делитель (НОД) двух чисел, можно использовать алгоритм, известный ещё древним грекам. Например, НОД(48, 18):

  1. 48 ÷ 18 = 2 (остаток 12)
  2. 18 ÷ 12 = 1 (остаток 6)
  3. 12 ÷ 6 = 2 (остаток 0) → НОД = 6.

Вопрос:
Опишите этот алгоритм словами. Постройте блок-схему. Реализуйте его в виде цикла: «пока остаток 0…».

Подсказка:
На каждом шаге большее число заменяется на остаток от деления.
Углубление:
Почему этот алгоритм всегда завершится? (Подсказка: остатки уменьшаются.)

Задача 5. «Игра „Угадай число“» (12–16 лет)

Компьютер загадывает число от 1 до 100. Игрок говорит вариант. Компьютер отвечает: «больше», «меньше» или «угадал».

Вопрос:
Придумайте алгоритм, который гарантированно угадает число не более чем за 7 попыток. Назовите его стратегию.

Подсказка:
Вместо «1, 2, 3…» попробуйте делить диапазон пополам: сначала 50, потом 25 или 75 и т.д.
Углубление:
Почему 7 попыток хватает? (Подсказка: 2⁷ = 128 > 100.)